GtkScrolledWindow: Do not hover one scrollbar if grabbing on the other
authorCarlos Garnacho <carlosg@gnome.org>
Mon, 14 Mar 2016 17:47:37 +0000 (18:47 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Mon, 14 Mar 2016 18:18:14 +0000 (19:18 +0100)
Makes no sense since we're not going to interact with it. It'll be
hovered eventually if the button is released.

gtk/gtkscrolledwindow.c

index 2d29d6509e90e1c902808ccc5a0abdf1ae745944..8a984907718ab769efff8e4bc70efdd31468a71d 100644 (file)
@@ -1167,7 +1167,8 @@ check_update_scrollbar_proximity (GtkScrolledWindow *sw,
                                   Indicator         *indicator,
                                   GdkEvent          *event)
 {
-  gboolean indicator_close, on_scrollbar;
+  GtkScrolledWindowPrivate *priv = sw->priv;
+  gboolean indicator_close, on_scrollbar, on_other_scrollbar;
   GtkWidget *event_widget;
 
   event_widget = gtk_get_event_widget (event);
@@ -1175,6 +1176,10 @@ check_update_scrollbar_proximity (GtkScrolledWindow *sw,
   indicator_close = event_close_to_indicator (sw, indicator, event);
   on_scrollbar = (event_widget == indicator->scrollbar &&
                   event->type != GDK_LEAVE_NOTIFY);
+  on_other_scrollbar = (!on_scrollbar &&
+                        event->type != GDK_LEAVE_NOTIFY &&
+                        (event_widget == priv->hindicator.scrollbar ||
+                         event_widget == priv->vindicator.scrollbar));
 
   if (indicator->over_timeout_id)
     {
@@ -1184,7 +1189,7 @@ check_update_scrollbar_proximity (GtkScrolledWindow *sw,
 
   if (on_scrollbar)
     indicator_set_over (indicator, TRUE);
-  else if (indicator_close)
+  else if (indicator_close && !on_other_scrollbar)
     indicator->over_timeout_id = gdk_threads_add_timeout (30, enable_over_timeout_cb, indicator);
   else
     indicator_set_over (indicator, FALSE);